package socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import bean.OSBean;
import conexao.Conexao;

public class servidor {

	public static void main(String[] args) throws IOException, ClassNotFoundException {

		String fraseCliente;
		//String FraseMaiuscula;

		// cria socket para recep��o na porta 6789
		ServerSocket server = new ServerSocket(12345); 

		while(true) {
			
			// aguarda, no socket para recep��o, o contato do cliente
			Socket connection = server.accept();

		//	System.out.println(connection.getInetAddress().getHostName());
			
			// cria fluxo de entrada, ligado ao socket
			ObjectInputStream doCliente = new ObjectInputStream(
					connection.getInputStream());
			
			
			
			// cria fluxo de sa�da, ligado ao socket
			ObjectOutputStream paraCliente = new ObjectOutputStream(
					connection.getOutputStream());
			paraCliente.flush();
			 
			
			
			//l� linha do socket
			fraseCliente = (String) doCliente.readObject();
			
			if(fraseCliente.equals("ultimaOsFinalizada")){
				try {
					Connection conn = new Conexao().getConexao();
					
					String sql = "select * from os, cliente where os.situacao = 'finalizado' and os.idcliente = cliente.id and os.id = (select max(id) from os)";
					
					PreparedStatement ps;
					
					ps = conn.prepareStatement(sql);
					
					ResultSet rs = ps.executeQuery();
					OSBean OS = new OSBean();
					if (rs.next()) {
						
						OS.setId(rs.getInt("id"));
						OS.setIdCliente(rs.getInt("idcliente"));
						OS.setNomeCliente(rs.getString("nome"));
						OS.setDataEntrada(rs.getTimestamp("dataentrada"));
						OS.setDataFinalizado(rs.getTimestamp("datafinalizado"));
						OS.setDescricao(rs.getString("descricao"));
						OS.setSituacao(rs.getString("situacao"));
						OS.setValor(rs.getDouble("valor"));
						
						
					}
					ps.close();
					rs.close();
					paraCliente.writeObject(OS);
					
				
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			//FraseMaiuscula = fraseCliente.toUpperCase();
			
			//escreve linha ao socket
//			paraCliente.writeObject(FraseMaiuscula);
			paraCliente.flush();
			
			connection.close();
			doCliente.close();
			paraCliente.close();
		}

	}

}
